package com.masita.logica;

import java.sql.*;
import java.util.Vector;

import com.masita.util.Utilidad;

public class Cuota{
	
	private int id_cuota;
	private int id_ficha;
	private int id_venta;
	private String fecha_cuota;
	private double monto;
	private boolean impresa;
	
	public Cuota(int id_c, int id_f, int id_v, String fec, double monto, boolean imp){
		 this.id_cuota = id_c;
		 this.id_ficha = id_f;
		 this.id_venta = id_v;
		 this.fecha_cuota = new String(fec);
		 this.monto = monto;
		 this.impresa = imp;
	}

	// METODO GET DE LA CLASE *****************************	
	public String getFechaCuota(){
		return fecha_cuota;
	}

	public int getIdCuota(){
		return id_cuota;
	}

	public int getIdFicha(){
		return id_ficha;
	}

	public int getIdVenta(){
		return id_venta;
	}

	public double getMonto(){
		return monto;
	}
	
	public boolean getImpresa(){
		return this.impresa;
	}

	public void setFechaCuota(String string){
		fecha_cuota = new String(string);
	}

	public void setIdVenta(int i){
		id_venta = i;
	}

	public void setIdFicha(int i){
		id_ficha = i;
	}

	public void setMonto(double d){
		monto = d;
	}
	
	public void setImpresa(boolean valor){
		this.impresa = valor;
	}
	
	// METODO S ESTATICOS DE LA CLASE *********************
	public static Vector getCuotasVenta(int id_v, int id_f){
		Vector cuotas = null;
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM cuota WHERE " +							   "id_venta = "+id_v+" AND "+
							   "id_ficha = "+id_f+" ORDER BY id_cuota";
			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				if( cuotas == null ) cuotas = new Vector();
				cuotas.addElement(new Cuota(rs.getInt("id_cuota"),
								  rs.getInt("id_ficha"),
								  rs.getInt("id_venta"),
								  rs.getString("fecha_cuota"),
								  rs.getDouble("monto"),
								  rs.getBoolean("impresa")));  
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		
		return cuotas;
	}
	
	// METODO GUARDAR DE LA CLASE *************************
	public int guardarDatos(){
		try{
			Statement st = Conexion.getStatement();
			String sentencia;
			if( this.id_cuota == 0){
				sentencia = "INSERT INTO cuota VALUES(0,"+this.id_ficha+","+
							this.id_venta+",'"+this.fecha_cuota+"',"+
							this.monto+",'"+this.impresa+"')";
				st.executeUpdate(sentencia);
				ResultSet rs = st.getGeneratedKeys();
				if( rs.next() ) this.id_cuota = rs.getInt(1);
			}
			else{
				sentencia = "UPDATE cuota SET fecha_cuota = '"+
							this.fecha_cuota+"', monto = "+this.monto+
							", impresa = '"+this.impresa+"' "+							
							"WHERE id_cuota = "+this.id_cuota+" AND "+
							"id_ficha = "+this.id_ficha+" AND "+
							"id_venta = "+this.id_venta;
				st.executeUpdate(sentencia);
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		
		return this.id_cuota;
	}
	
	// METODO ELIMINAR DE LA CLASE ************************
	public boolean eliminar(){
		try{
			if( this.id_cuota == 0 ) return false;
			
			Statement st = Conexion.getStatement();
			String sentencia = "DELETE FROM cuota " +					  		   "WHERE id_cuota = "+this.id_cuota+" AND "+
							   "id_ficha = "+this.id_ficha+" AND "+
							   "id_venta = "+this.id_venta;
			st.executeUpdate(sentencia);
			this.id_cuota = 0;
			
			return true;
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return false;
	}

	// METODO OBTENER CUOTAS ENTRE FECHAS
	public static Vector getCuotas(String fechaI, String fechaF){
		Vector cuotas = null;
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM cuota WHERE ";
			
			if( fechaI != null ){
				sentencia += "fecha_cuota BETWEEN '"+fechaI+"' AND '"+fechaF+"'";
			}
			else{
				sentencia += "fecha_cuota <= '"+( fechaF != null ? fechaF : Utilidad.getFechaHoy() )+"'";
			}

			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				if( cuotas == null ) cuotas = new Vector();
				cuotas.addElement(new Cuota(rs.getInt("id_cuota"),
								  rs.getInt("id_ficha"),
								  rs.getInt("id_venta"),
								  rs.getString("fecha_cuota"),
								  rs.getDouble("monto"),
								  rs.getBoolean("impresa")));  
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		
		return cuotas;
	}
	
}


